import { login, getUserInfo, LoginQ } from "@/api/user";
import {
  getToken,
  setToken,
  removeToken,
  getUserId,
  setUserId,
  removeUserId,
  getCid,
  setCid,
  removeCid,
  setTimeStamp,
  setLang,
  setMid,
  getMid
} from "@/utils/auth";
import { resetRouter } from "@/router";
// 状态
// 初始化的时候从缓存中获取状态，并且赋值到初始化状态上
const state = {
  token: getToken(), // 设置token的初始状态
  userId: getUserId(), // 设置userId的初始值
  userInfo: {}, // 存储用户资料
  cid: getCid(), // 用于存储cid企业的属性
  mid: getMid(), // 用于存储mid的属性
};
// 修改状态
const mutations = {
  // 新增设置cid的mutation方法
  setCid(state, cidValue) {
    state.cid = cidValue;
    setCid(cidValue);
  },
  // 设置状态
  setToken(state, data) {
    console.log(data);
    state.token = data.token; // 设置token,只是修改state的数据
    state.userId = data.user_id; // 设置userId,只是修改state的数据
    console.log(data.user_id);
    // vuex值发现变化，缓存数据
    // vuex数据与缓存同步
    setToken(data.token);
    setUserId(data.user_id);
  },
  // 跳转过来的状态
  setJumpQuery(state,data) {
    console.log(data);
    state.token = data.token; // 设置token,只是修改state的数据
    state.userId = data.uid; // 设置userId,只是修改state的数据
    state.mid = data.mid; // 设置mid,只是修改state的数据
      // vuex值发现变化，缓存数据
    // vuex数据与缓存同步
    setToken(data.token);
    setUserId(data.uid);
    setMid(data.mid)
  },
  removeToken(state) {
    state.token = null; // 将vuex的数据置空
    state.userId = null; // 将vuex的数据置空
    // 同步缓存
    removeToken();
    removeUserId();
    removeCid();
  },
  // 设置用户资料
  setUserInfo(state, result) {
    setLang(result.language);
    state.userInfo = result;
  },
  // 删除userinfo的资料
  removeUserInfo(state) {
    state.userInfo = {};
  },
};
const actions = {
  async login(context, data) {
    // 调用登入api
    const result = await login(data);
    context.commit("setToken", result); // 存入token
    // 存入时间戳
    setTimeStamp();
  },
  // 获取用户信息action
  async getUserInfo(context) {
    // 调用api
    const result = await getUserInfo();
    // 提交到mutations处理
    context.commit("setUserInfo", result);
    return result;
  },
  async loginQ(context, data) {
    // 调用扫码登入api
    const result = await LoginQ(data);
    if (result.code === 0) {
      context.commit("setToken", result); // 存入token
      // 存入时间戳
      setTimeStamp();
    }
  },
  // 退出登入逻辑
  logout(context) {
    console.log(context);
    // 清除token
    context.commit("removeToken");
    // 清除管理员资料
    context.commit("removeUserInfo");
    // 重置路由
    resetRouter();
    // 还有一步  vuex中的数据是不是还在
    // 要清空permission模块下的state数据
    // vuex中 user子模块  permission子模块
    // 子模块调用子模块的action  默认情况下 子模块的context是子模块的
    // 父模块 调用 子模块的action
    context.commit("permission/setRoutes", [], { root: true });
    // 子模块调用子模块的action 可以 将 commit的第三个参数 设置成  { root: true } 就表示当前的context不是子模块了 而是父模块
  },
};
export default {
  namespaced: true,
  state,
  mutations,
  actions,
};
